package com.ktjiaoyu.travelaiagent.agent;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;

/**
 * ReActAgent (Reasoning and Acting)
 * 思考-行动的循环模式的Agent
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Slf4j
public abstract class ReActAgent extends BaseAgent {

    /**
     * 思考方法
     * 根据当前状态和目标，决定下一步的行动
     * @return 是否执行act()
     */
    public abstract boolean think();

    /**
     * 行动方法
     * 根据think()方法的结果，执行相应的行动
     */
    public abstract String act();

    @Override
    public String step() {
        try{
            // 先think思考，返回true，才执行act
            if (think()) {
                return act();
            }else{
                return "思考完成 - 无需行动";
            }
        }catch (Exception e){
            log.error("ReActAgent step error: {}", e.getMessage());
            return "步骤执行异常：" + e.getMessage();
        }
    }
}
